<?php
/*******************************************************************************

    FinalsClub.org is a platform for students and faculty to collaborate
    and share their knowledge with the world.

    Copyright (C) 2009  Andrew Magliozzi
 
    This file is a part of FinalsClub.org.

    FinalsClub.org is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.
 
    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.
 
    You should have received a copy of the GNU General Public License
    along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
    To contact FinalsClub.org, send an email to info@finalsclub.org, or
    send mail to Finals Club, c/o Veritas Tutors, 1132 Massachusetts Avenue,
    Cambridge, MA 02138.

*******************************************************************************/

class GroupMemberPeer extends BaseGroupMemberPeer {
	
	const NONE = 0;
	const VIEWER = 1;
	const CONTRIBUTOR = 2;
	const ADMIN = 3;
	
	const REJECTED_STATUS = 0;
	const APPROVED_STATUS = 1;
	const PENDING_STATUS = 2;
	
	public static $roleTypes = array(
		self::VIEWER => 'Viewer',
		self::CONTRIBUTOR => 'Contributor',
		self::ADMIN => 'Admin'
	);
	
	/**
	 * Retrieves all the members of a given group
	 * @param $group_id, the id of the group
	 * @return array of GroupMember objects
	 */
	public static function retrieveByGroupId($group_id, $status = GroupMemberPeer::APPROVED_STATUS) {
		$c = new Criteria();
		$c->add(GroupMemberPeer::GROUP_ID, $group_id);
		$c->add(GroupMemberPeer::STATUS, $status);
		return GroupMemberPeer::doSelectJoinUser($c);	// retrieve an join the associated user for the group
	}
	
	/**
	 * Retrieve a user's group membership for a given user id and group id
	 * @param $user_id
	 * @param $group_id
	 * @return a single GroupMember object
	 */
	public static function retrieveByUserIdAndGroupId($user_id, $group_id) {
		$c = new Criteria();
		$c->add(GroupMemberPeer::USER_ID, $user_id);
		$c->add(GroupMemberPeer::GROUP_ID, $group_id);
		return GroupMemberPeer::doSelectOne($c);
	}
	
	/**
	 * Retrieve all groups belonging to a given user
	 * @param $user_id
	 * @return array of GroupMember objects
	 */
	public static function retrieveByUserId($user_id) {
		$c = new Criteria();
		$c->add(GroupMemberPeer::USER_ID, $user_id);
		return GroupMemberPeer::doSelectJoinGroup($c);
	}

	/**
	 * Retrieve a group member object for a given group_member primary key id
	 * @param $id
	 * @return a single GroupMember object
	 */
	public static function retrieveById($id) {
		return GroupMemberPeer::retrieveByPK($id);
	}
	
}
